package demo.hbase.test;

import lombok.extern.slf4j.Slf4j;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @Description TODO
 * @Author 作者： chenMing
 * @DATE 创建时间： 2023/11/21 11:07
 * @Version 版本：cmBoot1.0
 */
@Slf4j
public class HbaseUtil {

    /**
     * Hbase数据库 调用的特定链接方式
     * @param dto
     * @return
     */
   public static List<String> hbaseConnection(DbConfigParamDto dto) {
        List<String> list = new ArrayList<>();

        // 配置 HBase 连接
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "172.16.11.56");
//        conf.set("hbase.zookeeper.property.clientPort", "2181");
        conf.set("hbase.master", "172.16.11.56:60000");
        // 连接 HBase
        try {
            Connection connection = ConnectionFactory.createConnection(conf);
            Admin admin = connection.getAdmin();
            // 列出所有命名空间
            NamespaceDescriptor[] namespaceDescriptors = admin.listNamespaceDescriptors();
            for (NamespaceDescriptor nd : namespaceDescriptors) {
                list.add(nd.getName());
            }
            System.out.println(list);
            //获取Table对象，指定要操作的表名(这里需要提前创建好)
//            Table table = connection.getTable(TableName.valueOf("Test"));
//            //指定Rowkey，返回put对象      这里进行批量插入数据再声明一个Put对象再添加一次put对象(也可以声明一个List<Put>集合添加list对象)
//            Put put = new Put(Bytes.toBytes("001"));
//            //向put对象中指定列族、列、值
//            put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name"),Bytes.toBytes("zhujuntao"));
//            put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("sex"),Bytes.toBytes("man"));
//            put.addColumn(Bytes.toBytes("level"),Bytes.toBytes("course"),Bytes.toBytes("qq"));
            //向表中添加数据
//            table.put(put);
//            //关闭table连接
//            table.close();
//            for (NamespaceDescriptor nd : namespaceDescriptors) {
//                if(dto.getCustomizedInstance().equals(0)) {
//                    //自动定义，说明是扫描全部的
//                    list.add(nd.getName());
//                }else {
//                    //非自定义，则指定了实例名，当命名空间包含了 指定的实例名，则表示该实例名可以链接
//                    if(StringUtils.equals(nd.getName(), dto.getInstanceName())){
//                        list.add(nd.getName());
//                        //结束循环
//                        break;
//                    }
//                }
//            }
            namespaceDescriptors.clone();
            admin.close();
            connection.close();
            conf.clear();
        } catch (IOException e) {
            //由于此处被定时任务调用，使用此时不需要打印，不然日志会出现一堆无意义的日志信息
            log.error("Hbase IOException->{}",e);
            conf.clear();
            return null;
        }

        return list;
    }


}
